
package com.jf.cloud.payment.mapper;

import com.jf.cloud.api.payment.vo.AccountDetailVO;
import com.jf.cloud.payment.model.PayInfo;
import com.jf.cloud.payment.vo.PayInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 订单支付记录
 *
 * @author zz
 * @date 2020-12-25 09:50:59
 */
public interface PayInfoMapper {

    /**
     * 获取订单支付记录列表
     *
     * @return 订单支付记录列表
     */
    List<PayInfo> list();

    /**
     * 根据订单支付记录id获取订单支付记录
     *
     * @param payId 订单支付记录id
     * @return 订单支付记录
     */
    PayInfo getByPayId(@Param("payId") Long payId);

    /**
     * 保存订单支付记录
     *
     * @param payInfo 订单支付记录
     */
    void save(@Param("payInfo") PayInfo payInfo);

    /**
     * 更新订单支付记录
     *
     * @param payInfo 订单支付记录
     */
    void update(@Param("payInfo") PayInfo payInfo);

    /**
     * 根据订单支付记录id删除订单支付记录
     *
     * @param payId
     */
    void deleteById(@Param("payId") Long payId);

    /**
     * 根据支付订单号获取订单支付状态
     *
     * @param orderIds 订单号ids
     * @return 支付状态
     */
    Integer getPayStatusByOrderIds(@Param("orderIds") String orderIds);

    /**
     * 查询订单是否已经支付
     *
     * @param orderIds 订单id
     * @param userId   用户id
     * @param payEntry 支付入口
     * @return 是否已经支付
     */
    Integer isPay(@Param("orderIds") String orderIds, @Param("userId") Long userId, @Param("sysType") Integer sysType, @Param("payEntry") Integer payEntry);

    /**
     * 根据订单id，获取订单支付的信息
     *
     * @param orderIds 订单ids
     * @return 支付信息
     */
    List<PayInfo> listByOrderIds(@Param("orderIds") List<Long> orderIds);

    /**
     * 根据时间参数获取收入账户详情
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 收入账户详情
     */
    AccountDetailVO getIncomeAccountDetail(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 根据时间参数获取支付详情
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 支付详情
     */
    List<PayInfoVO> getPayInfoVO(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 获取已经支付成功的订单支付信息
     *
     * @param orderIds
     * @param userId
     * @return
     */
    List<PayInfo> listPayedInfoByOrderIds(@Param("orderIds") List<Long> orderIds, @Param("userId") Long userId);
    /**
     * 根据payIds获取支付信息集合
     * @param payIdList 支付单号
     * @return
     */
    List<PayInfo> getByPayIds(@Param("payIdList") List<Long> payIdList);
}
